#pragma once
#include "Xps/Packet/IPacket.h"
#include "Xps/Protocol/IProtocol.h"
#include "Xps/Tasks/ITask.h"

namespace Xps
{
    class IManager abstract
    {
    public:
        virtual void Start() = 0;
        virtual void Stop() = 0;
        virtual bool RegisterProtocol(const std::string &_ProtocolName, IProtocol::Ptr _Protocol) = 0;
        virtual bool UnRegisterProtocol(const std::string &_ProtocolName) = 0;
        virtual bool RegisterTask(const std::string &_TaskName, ITask::Ptr _Task) = 0;
        virtual bool UnRegisterTask(const std::string &_TaskName) = 0;
        virtual bool PushPacket(const std::string &_ProtocolName, const IPacket::Ptr _Packet) = 0;
        virtual IProtocol::Ptr getProtocol(const std::string &_ProtocolName) = 0;
        virtual ~IManager(void){}
    };
};